package de.muenchen.interceptor;

import java.util.Collections;
import java.util.Map;
import java.util.Set;

import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
import com.opensymphony.xwork2.util.TextParseUtil;

import de.muenchen.action.BaseAction;
import de.muenchen.bean.UserBean;


public class AuthenticationInterceptor extends AbstractInterceptor{

	/**
     * 
     */
    private static final long serialVersionUID = 1L;

    private Set<String> actionsOhneAuthenticationCheck = Collections.emptySet();
    
	UserBean userBean;
	//ActionForward String
    public static final String LOGIN_ERFORDERLICH_FORWARD = "loginErforderlich";

    @Override
    public String intercept(ActionInvocation invocation) throws Exception {
        Map<String, Object> session = invocation.getInvocationContext()
                .getSession();
        String actionName = invocation.getProxy().getActionName();
        //hole die Daten des aktuell angemeldeten Benutzers aus der Session
        userBean = (UserBean) session.get("loginToken");

        //wenn die aktuelle Action explizit von der Authentisierung ausgenommen ist
        //oder das Benutzer-Objekt in der Session existiert und eine UserID beinhaltet
        //oder in der Session die userId existiert...
        if (actionsOhneAuthenticationCheck.contains(actionName)
                || (userBean != null)) {
            //... dann f�hre den Action-Aufruf fort...
            return invocation.invoke();
        } else {
            
            //...an sonsten setzte einen Action-Fehler zur Ausgabe auf der n�chsten Seite...
            if (invocation.getAction() instanceof BaseAction) {
                BaseAction action = (BaseAction) invocation.getAction();
                action.addActionError(action.getText("login.required"));
            }
            //...und verzweige auf die loginErforderlich-Seite
            return LOGIN_ERFORDERLICH_FORWARD;
        }
    }

    /**
     * Setter f�r Actions, die keiner Pr�fung bed�rfen.
     * @param values - Liste der Actions ohne Pr�fung.
     */
    public void setActionsOhneAuthenticationCheck(String values) {
        if (values != null) {
            this.actionsOhneAuthenticationCheck = TextParseUtil
                    .commaDelimitedStringToSet(values);
        }
    }

    
    
}
